iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
Kotlin

new to Kotlin系列 第 18

Day 18 密封

  • 分享至 

  • xImage
  •  

昨天我們介紹了資料類別,今天則是要談談密封

密封類別以及介面代表著受到繼承限制
宣告的方式如下,在個別的名稱前面加上sealed

sealed interface Error

sealed class IOError(): Error

class FileReadError(val file: File): IOError()
class DatabaseError(val source: DataSource): IOError()

object RuntimeError : Error

需要注意的是密封類別(sealed class)它本身是抽象的,因此無法被實例化

密封類別的建構子可以是protected(預設)或是private

sealed class IOError {
    constructor() { /*...*/ }
    private constructor(description: String): this() { /*...*/ }
}

當使用when表示式時,密封類別的優勢就在於已包含所有的case,因此不需要另外的else
這部分可以參考以下範例:

fun log(e: Error) = when(e) {
    is FileReadError -> { println("Error while reading file ${e.file}") }
    is DatabaseError -> { println("Error while reading from database ${e.source}") }
    is RuntimeError ->  { println("Runtime error") }
}

上一篇
Day 17 資料類別
下一篇
Day 19 巢狀類別以及內部類別
系列文
new to Kotlin30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言